package com.wf.apicommons.entity.MessageBoard;

import cn.hutool.json.JSONUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Description: 推送到Mq的消息实体类
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MqMessage<T>  {
    /**
     * 新增或修改
     */
    public final static String CREATE_OR_UPDATE = "create_or_update";

    /**
     * 删除
     */
    public final static String DELETE = "delete";

    /**
     * 消息类型-聊天
     */
    public final static String MESSAGE_TYPE_CHAT= "message_type_chat";

    /**
     * 消息类型-留言-私信
     */
    public final static String MESSAGE_TYPE_PRIVATE_LETTER= "message_type_private_letter";

    /**
     * 消息类型-留言-系统留言
     */
    public final static String MESSAGE_TYPE_SYSTEM_MESSAGE= "message_type_system_message";


    /**
     * 当前需要进行的操作
     */
    private String operation;

    /**
     * 消息类型
     */
    private String  messageType;


    /**
     * 存储Json格式的数据
     */
   private String jsonData;

    /**
     * 设置消息数据
     * @param data 需要携带的数据
     * @param operation 当前操作
     * @return
     */
    public static <T> MqMessage<T> setMsgData(T data,String operation) {
        MqMessage<T> message = new MqMessage<>();
        message.setOperation(operation);
        message.setJsonData(JSONUtil.toJsonStr(data));
        return message;
    }

    /**
     * 设置消息数据
     * @param data 需要携带的数据
     * @return
     */
    public static <T> MqMessage<T> setMsgData(T data) {
        MqMessage<T> message = new MqMessage<>();
        message.setJsonData(JSONUtil.toJsonStr(data));
        return message;
    }


    /**
     * 设置消息类型及消息数据
     * @param data 消息数据
     * @param messageType 消息类型
     * @param <T>
     * @return 返回当前存储的消息对象
     */
    public static  <T> MqMessage<T> setMessageTypeAndData(T data,String messageType){
        MqMessage<T> message = new MqMessage<>();
        message.setMessageType(messageType);
        message.setJsonData(JSONUtil.toJsonStr(data));
        return message;
    }

}
